package com.changgou.file.controller;

import com.changgou.entity.Result;
import com.changgou.entity.StatusCode;
import com.changgou.file.util.FastDFSClient;
import com.changgou.file.util.FastDFSFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
@RequestMapping("/file")
public class FileController {
    //定义日志实例
    private Logger logger = LoggerFactory.getLogger(getClass());

    @PostMapping("/upload")
    public Result upload(@RequestParam("file") MultipartFile file){
        String fileName = null;
        try {
             fileName = file.getOriginalFilename();//获取文件全名  例如:1.2.3.jpg
            String extName = fileName.substring(fileName.lastIndexOf("."));//获取扩展名  形式如:.jpg
            byte[] fileContent = file.getBytes();//文件内容
            //构建一个FastDFSFile对象
            FastDFSFile fastDFSFile = new FastDFSFile(fileName,fileContent,extName);
            String[] uploadResult = FastDFSClient.upload(fastDFSFile);
            if (uploadResult!=null&&uploadResult.length==2){
                String groupName = uploadResult[0];//获取文件名
                String remoteFilePath = uploadResult[1];//获取文件在存储服务器的远程存储路径
                    // 将路径存储到数据库表中
                //获取下载地址前缀
                String url = FastDFSClient.getTrackerUrl()+groupName+"/"+remoteFilePath;
                logger.info("上传成功了奥!!  url:{}",url);
                return new Result(true, StatusCode.OK,"上传成功啦!!",url);
            }else {
                logger.error("上传失败啦!!  fileName:{}",fileName);
                return new Result(false, StatusCode.ERROR,"上传失败啦!!");

            }
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("上传失败啦!!  fileName:{}",fileName);
            return new Result(false, StatusCode.ERROR,"网络异常,上传失败啦!!");
        }
    }
}
